package com.yc.动态代理;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.test.context.ContextConfiguration;

/**
 * JDK 动态代理 vs CGLIB 动态代理
 *  1. JDK 动态代理忠实于代理模式 ==> 接口实现
 *     ==> 代理对象与被代理对象是"兄弟关系"
 *     ==> 必须有接口支持
 *      ==> 一旦开始AOP, Spring检查到被代理对象有实现接口,
 *              那么就是使用JDK动态代理
 *              影响: 注入对象必须使用接口定义类型
 *              @Resource
 *              抽象主题 a;
 *
 *  2. CGLIB 动态代理使用动态字节码 ==> 继承实现
 *     ==> 代理对象(子)与被代理对象(父)是"父子关系"
 *     ==> 可以没有接口
 *     ==> 不可代理情况
 *      ==> 1. 父类private方法
 *      ==> 2. 父类final方法
 */
@ContextConfiguration
@ComponentScan("com.yc.动态代理")
@EnableAspectJAutoProxy
public class AopConfig {
}
